共计 1546 个字符,预计需要花费 4 分钟才能阅读完成。
提醒:本文最后更新于 2024-08-30 15:05,文中所关联的信息可能已发生改变,请知悉!
工作概述
相似度探究
graph LR
A(取 2 * 3 的像素点) -->B(视为两个相邻格子)
B --> C(求取相似度 S)
C -->| 存在阈值 D > S| D[属性相同]
C -->| 存在阈值 D < S| E[属性不同]
代码示例
# utf-8
# python3.8
import cv2 as cv
import numpy as np
import matplotlib.pyplot as plt
def get_unit_similarity(a_4, b_4, k):
a_4 = sorted(a_4)
b_4 = sorted(b_4)
result = 0
for i in range(4):
result = result + (abs(int(a_4[i]) - int(b_4[i]))) ** k
result = result ** (1/k)
return int(result)
def get_channels_similarity(channel, k):
row, col = channel.shape
result = []
for i in range(row - 2):
for j in range(col - 2):
array = [channel[i][j], channel[i][j + 1], channel[i + 1][j + 1], channel[i + 1][j]]
r_array = [channel[i][j + 1], channel[i + 1][j + 1], channel[i][j + 2], channel[i + 1][j + 2]]
d_array = [channel[i + 1][j + 1], channel[i + 1][j], channel[i + 2][j + 1], channel[i + 2][j]]
r_similarity = get_unit_similarity(array, r_array, k)
d_similarity = get_unit_similarity(array, d_array, k)
result.append(r_similarity)
result.append(d_similarity)
return result
def get_img_similarity(img, k):
p = cv.imread(img, 1)
b, g, r = cv.split(p)
b_similarity = get_channels_similarity(b, k)
g_similarity = get_channels_similarity(g, k)
r_similarity = get_channels_similarity(r, k)
cnt = np.zeros(400)
for i in range(len(b_similarity)):
cnt[b_similarity[i]] += 1
for i in range(len(g_similarity)):
cnt[g_similarity[i]] += 1
for i in range(len(r_similarity)):
cnt[r_similarity[i]] += 1
plt.plot(cnt, color='red')
plt.rcParams['font.sans-serif'] = ['SimHei']
plt.rcParams['axes.unicode_minus'] = False
plt.title(' 相似度分布图 k = ' + str(k), fontsize=24, color='black')
plt.show()
if __name__ == '__main__':
img_addr = 'img.png'
get_img_similarity(img_addr, 1)
结果
省略 100 以后的数据,得到的放大图
噪声图
正文完